--
-- Author: shineflag
-- Date: 2017-04-12 11:25:45
--
--[[
牌局日志:   --json字符串
{
	stime=1456789,   --牌局开始时间
	etime=1456799,  --牌局结束时间
	lv=1,          --场次
	tid=1000,  --房间号
	ante=5,   --前注
	sb=10,    --小盲
	bb=20,  --大盲
	seats={[3] = {mid=1923,coin=coin,cards={0x34,0x35}},     --本局玩牌座位上的主要信息
	dsid=1,   --庄家位 dealer seat id
	ssid=1,  --小盲位 small blind seat id
	bsid=3,  --大盲位 big blind seat id
	pcards = {0x2A,0x36，0x12,0x38,0x29}, --五张公共牌
	aante={1=5,3=5} ----包括前注和强制大小盲
	preshow = 2 --提前亮牌的阶段 	preflop= 1,flop = 2, turn= 3,river= 4,
	preflop={   --发牌前各玩家的行动序列
		{s=3,t=0,op=1,c=20},      --  s：座位号   t:在牌局开始多少秒时行动   op:操作 0-弃 1-下注或看牌   c:下注了多少筹码可能为0
		{s=1,t=3,op=1,c=20},
		...
	}

	flop={   --发牌后各玩家的行动序列   如果在此之前结束 则无此项
		{s=3,t=0,op=1,c=20},      --  s：座位号   t:在牌局开始多少秒时行动   op:操作 0-弃 1-下注或看牌   c:下注了多少筹码可能为0
		...
	}

	turn={   --转牌后各玩家的行动序列  如果在此之前结束 则无此项
		{s=3,t=0,op=1,c=20},      --  s：座位号   t:在牌局开始多少秒时行动   op:操作 0-弃 1-下注或看牌   c:下注了多少筹码可能为0
		...
	}

	river={   --河牌后各玩家的行动序列 如果在此之前结束 则无此项
		{s=3,t=0,op=1,c=20},      --  s：座位号   t:在牌局开始多少秒时行动   op:操作 0-弃 1-下注或看牌   c:下注了多少筹码可能为0
		...
	}
	spots = { [status] = {[potid] = 100,[6] = 1000}  } --本轮奖池增加的数目

	result = {
		show={1,3}  --要亮牌的座位
		pots = {
			[1] = {tcoins = 1001,tfee=1,winers= { 
										--            赢取  
											{seatid=1,coin=501}, 
											{seatid=2,coin=500}, 
										 }
				   }
		}	
	}
}
--]]
local mt = {}

--庄家位的座位号
function mt:setDealer(db, sb, bb)
	self.dsid = db 
	self.ssid = sb 
	self.bsid = bb
end

function mt:setPcards(cards)
	self.pcards = cards
end

--
function mt:setPlayer(seatid,mid,coin,cards)
	self.seats[seatid]={mid=mid,coin=coin,cards=cards}
end

function mt:setAction( s )
	self.s_ = s 
	if s == "ante" then 
		self.aante={}
		self.cur_action = self.aante 
	elseif s == "preflop" then 
		self.preflop = {}
		self.cur_action = self.preflop
	elseif s == "flop" then 
		self.flop = {}
		self.cur_action = self.flop
	elseif s == "turn" then 
		self.turn = {}
		self.cur_action = self.turn
	elseif s == "river" then 
		self.river = {}
		self.cur_action = self.river
	end
end

function mt:addAction(seatid, chips, opt)
	if self.s_ == "ante" then 
		self.cur_action[seatid] = self.cur_action[seatid] and  self.cur_action[seatid]+chips or chips
	else
		local tm = os.time() - self.stime
		table.insert( self.cur_action,{s=seatid,t=tm,op=opt,c=chips} )
	end
end

function mt:preShowStatus(s)
	self.preshow = s
end

function mt:changePot(s,pots)
	self.spots[s] = pots
end

function mt:setResult(show, pots)
	self.cur_action = nil 
	self.s_ = nil 
	
	self.etime = os.time()
	self.result={
		pots = pots
	}
	if #show > 0 then
		self.result.show = {}
		for id,v in ipairs(show) do 
			self.result.show[id] = v.seatid 
		end
	end

end


--创建一个牌局日志
local function create_log(lv,tid,sb,bb,ante)
	return setmetatable({lv=lv,tid=tid,sb=sb,bb=bb,ante=ante,stime=os.time(),seats={},spots={}},{__index = mt})
end

return {create_log=create_log}